#!/bin/bash

# test.sh - 运行单元测试和交叉测试的脚本

# 设置脚本在遇到错误时立即退出
set -e

# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo -e "${BLUE}=================================${NC}"
echo -e "${BLUE}     Moment4CJ 测试脚本        ${NC}"
echo -e "${BLUE}=================================${NC}"

# 运行单元测试
echo -e "\n${YELLOW}正在运行单元测试...${NC}"
cd "$SCRIPT_DIR"
if cjpm test; then
    echo -e "${GREEN}✅ 单元测试通过${NC}"
else
    echo -e "${RED}❌ 单元测试失败${NC}"
    exit 1
fi

# 运行交叉验证测试
echo -e "\n${YELLOW}正在运行交叉验证测试...${NC}"
if node CrossTest/cross_validation.js; then
    echo -e "${GREEN}✅ 交叉验证测试通过${NC}"
    
    # 显示交叉验证测试结果摘要
    if [ -f "CrossTest/validation_report.json" ]; then
        echo -e "\n${BLUE}交叉验证测试结果:${NC}"
        # 使用jq解析JSON报告（如果安装了jq）
        if command -v jq &> /dev/null; then
            total=$(jq -r '.summary.totalTests' CrossTest/validation_report.json)
            passed=$(jq -r '.summary.passedTests' CrossTest/validation_report.json)
            failed=$(jq -r '.summary.failedTests' CrossTest/validation_report.json)
            echo -e "  总测试数: $total"
            echo -e "  通过测试数: $passed"
            echo -e "  失败测试数: $failed"
            
            if [ "$failed" -eq 0 ]; then
                echo -e "${GREEN}  通过率: 100%${NC}"
            else
                rate=$(echo "scale=2; $passed * 100 / $total" | bc)
                echo -e "${YELLOW}  通过率: ${rate}%${NC}"
            fi
        else
            # 如果没有jq，显示基本报告信息
            echo "  详细报告请查看 CrossTest/validation_report.md 和 CrossTest/validation_report.json"
        fi
    fi
else
    echo -e "${RED}❌ 交叉验证测试失败${NC}"
    exit 1
fi

echo -e "\n${GREEN}🎉 所有测试均已通过!${NC}"
echo -e "${BLUE}=================================${NC}"
echo -e "${BLUE}测试报告位置:${NC}"
echo -e "  - 单元测试报告: 终端输出"
echo -e "  - 交叉验证报告: CrossTest/validation_report.md"
echo -e "  - 交叉验证JSON: CrossTest/validation_report.json"
echo -e "${BLUE}=================================${NC}"